//
//  STDSEffectTool.h
//  STDRenderSDK
//
//  Created by 陈学明 on 2023/3/15.
//

#ifndef EffectTool_h
#define EffectTool_h

#include "STDSEffectHeader.h"

namespace STDSEffectTool {
    shared_ptr<STDSBaseEffect> getEffectPainter(STDSEffectType type) {
        shared_ptr<STDSBaseEffect> effect = nullptr;
        switch (type) {
            case STDSEffectTypeTransformation:
                effect = make_shared<STDSTransformationEffect>();
                break;
            case STDSEffectTypeDefault:
                effect = make_shared<STDSDefaultEffect>();
                break;
            case STDSEffectTypeBlend:
                effect = make_shared<STDSBlendEffect>();
                break;
            case STDSEffectTypeStroke:
                effect = make_shared<STDSShapenStrokeEffect>();
                break;
            case STDSEffectTypeFill:
                effect = make_shared<STDSShapenFillEffect>();
                break;
            case STDSEffectTypeGrain:
                effect = make_shared<STDSGrainEffect>();
                break;
            case STDSEffectTypeGaussianBlur:
                effect = make_shared<STDSGaussianBlurEffect>();
                break;
            case STDSEffectTypeHairColor:
                effect = make_shared<STDSHairColorEffect>();
                break;
            case STDSEffectTypeContrast:
                effect = make_shared<STDSConstrastEffect>();
                break;
            case STDSEffectTypeGlowLight:
                effect = make_shared<STDSGlowLightEffect>();
                break;
            case STDSEffectTypeVignette:
                effect = make_shared<STDSVignetteEffect>();
                break;
            case STDSEffectTypeColorGrain:
                effect = make_shared<STDSColorGrainEffect>();
                break;
            case STDSEffectTypeLightArea:
                effect = make_shared<STDSLightAreaEffect>();
                break;
            case STDSEffectTypeWhiteBalance:
                effect = make_shared<STDSWihteBalanceEffect>();
                break;
            case STDSEffectTypeMixMask:
                effect = make_shared<STDSMixMaskEffect>();
                break;
            case STDSEffectTypeSkinDetect:
                effect = make_shared<STDSSkinDetectEffect>();
                break;
            case STDSEffectTypeSkinLutDetect:
                effect = make_shared<STDSSkinLutDetectEffect>();
                break;
            case STDSEffectTypeSkinWiten:
                effect = make_shared<STDSSkinWitenEffect>();
                break;
            case STDSEffectTypeMosaic:
                effect = make_shared<STDSMosaicEffect>();
                break;
            case STDSEffectTypePuzzleUnit:
                effect = make_shared<STDSPuzzleUnitEffect>();
                break;
            case STDSEffectTypePuzzleStars:
                effect = make_shared<STDSPuzzleStarsEffect>();
                break;
            case STDSEffectTypePuzzleGlass:
                effect = make_shared<STDSPuzzleGlassEffect>();
                break;
            case STDSEffectTypePuzzleCartoon:
                effect = make_shared<STDSPuzzleCartoonEffect>();
                break;
            case STDSEffectTypeBilateralBlur:
                effect = make_shared<STDSBilateralBlurEffect>();
                break;
            case STDSEffectTypeGlassTile:
                effect = make_shared<STDSGlassTileEffect>();
                break;
            case STDSEffectTypePictrueDissip:
                effect = make_shared<STDSParticleDissipateEffect>();
                break;
            case STDSEffectTypeHairPainter:
                effect = make_shared<STDSPainterHairEffect>();
                break;
            case STDSEffectTypeCloneStamp:
                effect = make_shared<STDSCloneStampEffect>();
                break;
            case STDSEffectTypeLut:
                effect = make_shared<STDSLutEffect>();
                break;
            default:
                effect = nullptr;
                break;
        }
        return effect;
    }
};
#endif /* EffectTool_h */
